using System.Collections;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 游戏引导系统（GuideSystem）
/// 适用于新手教程，以打字机效果显示游戏提示信息。
/// </summary>
public class GuideSystem : MonoBehaviour
{
    [Header("UI 组件")]
    public GameObject guidePanel; // 引导界面
    public TMP_Text dialogueText; // 显示文本（改为 TMP_Text）
    public Button nextButton; // “下一步”按钮
    public Button closeButton; // “关闭”按钮

    [Header("打字机设置")]
    public float typingSpeed = 0.05f; // 文字显示速度

    [Header("引导文本内容")]
    public string[] dialogues =
    {
        "欢迎来到游戏！",
        "你可以使用WASD移动角色。",
        "按空格键进行跳跃。",
        "祝你游戏愉快！"
    };

    private int currentIndex = 0; // 当前文本索引
    private bool isTyping = false; // 是否正在打字
    private Coroutine typingCoroutine; // 记录打字协程

    private void Start()
    {
        // 绑定按钮事件
        nextButton.onClick.AddListener(OnNextButtonClick);
        closeButton.onClick.AddListener(CloseGuide);

        guidePanel.SetActive(false); // 初始隐藏
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape) && !guidePanel.activeSelf)
        {
            ShowGuide();
        }
    }

    /// <summary>
    /// 显示引导界面
    /// </summary>
    public void ShowGuide()
    {
        guidePanel.SetActive(true);
        currentIndex = 0; // 重置索引

        // 开始显示第一个文本
        StartTyping(dialogues[currentIndex]);
    }

    /// <summary>
    /// 处理 "下一步" 按钮点击
    /// </summary>
    private void OnNextButtonClick()
    {
        if (isTyping)
        {
            // 直接显示完整文本，跳过打字效果
            CompleteTyping();
        }
        else
        {
            currentIndex++;
            if (currentIndex < dialogues.Length)
            {
                StartTyping(dialogues[currentIndex]); // 显示下一个文本
            }
            else
            {
                CloseGuide(); // 结束引导
            }
        }
    }

    /// <summary>
    /// 关闭引导界面
    /// </summary>
    private void CloseGuide()
    {
        guidePanel.SetActive(false);
    }

    /// <summary>
    /// 开始打字机效果
    /// </summary>
    private void StartTyping(string text)
    {
        if (typingCoroutine != null)
        {
            StopCoroutine(typingCoroutine);
        }
        typingCoroutine = StartCoroutine(TypeText(text));
    }

    /// <summary>
    /// 逐字显示文本
    /// </summary>
    private IEnumerator TypeText(string text)
    {
        isTyping = true;
        dialogueText.text = "";
        foreach (char letter in text)
        {
            dialogueText.text += letter;
            yield return new WaitForSeconds(typingSpeed);
        }
        isTyping = false;
    }

    /// <summary>
    /// 直接显示完整文本（跳过打字动画）
    /// </summary>
    private void CompleteTyping()
    {
        if (typingCoroutine != null)
        {
            StopCoroutine(typingCoroutine);
        }
        dialogueText.text = dialogues[currentIndex];
        isTyping = false;
    }
}